package edu.hubu.supermarketmanagementsystem.controller;

import edu.hubu.supermarketmanagementsystem.entity.Admin;
import edu.hubu.supermarketmanagementsystem.service.AdminService;
import edu.hubu.supermarketmanagementsystem.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@CrossOrigin
public class AdminController {

    @Autowired
    private AdminService adminService;

    @RequestMapping("/admin/check")
    public ResultVO<String> check(String username) {
        return adminService.checkUsername(username);
    }

    /**
     * 用于注册员工账户。
     * @param username 用户名。
     * @param password 密码。
     * @param name 姓名。
     * @param telephone 电话号码。
     * @param role 角色。
     * @return 带有信息的 ResultVO 实体。
     */
    @RequestMapping("/admin/register")
    public ResultVO<String> register(String username, String password, String name, String telephone, String role) {
        return adminService.register(username, password, name, telephone, role);
    }

    /**
     * 用于检测员工账户的用户名和密码是否正确，从而实现登录。
     * @param username 键入的用户名。
     * @param password 键入的密码。
     * @return 如果查询到符合这个条件的用户，则返回的 ResultVO 实体中，含有此用户实体本身。
     */
    @RequestMapping("/admin/login")
    public ResultVO<Admin> login(String username, String password) {
        return adminService.login(username, password);
    }

    /**
     * 用于获取员工基本信息名单。
     * @return 带有用户基本信息 Java Beans 数组的 ResultVO 实体。
     */
    @RequestMapping("/admin/getUserList")
    public ResultVO<Admin[]> getUserList() {
        return adminService.getUserList();
    }

    /**
     * 用于更新员工信息。
     * @param id 待更新信息的用户ID。
     * @param username 更新后的用户名。
     * @param name 更新后的姓名。
     * @param telephone 更新后的电话号码。
     * @param role 更新后的角色。
     * @return 如果更新成功，则返回的 ResultVO 实体中包含 true，否则包含 false。
     */
    @RequestMapping("/admin/updateUser")
    public ResultVO<Boolean> updateUser(Integer id, String username, String name, String telephone, String role) {
        return adminService.updateUser(id, username, name, telephone, role);
    }

    /**
     * 用于更新员工的密码。由于密码在数据库内以 SHA256 散列后的形式储存，需要额外的方法更新密码。
     * @param id 待更新密码的用户ID。
     * @param password 更新后的密码。
     * @return 如果更新成功，则返回的 ResultVO 实体中包含 true，否则包含 false。
     */
    @RequestMapping("/admin/updateUserPassword")
    public ResultVO<Boolean> updateUserPassword(Integer id, String password) {
        return adminService.updatePassword(id, password);
    }

    /**
     * 用于删除员工账户。
     * @param id 待删除的用户ID。
     * @return 如果删除成功，则返回的 ResultVO 实体中包含 true，否则包含 false。
     */
    @RequestMapping("/admin/deleteUser")
    public ResultVO<Boolean> deleteUser(Integer id) {
        return adminService.deleteUser(id);
    }

    /**
     * 用于根据 ID 查找员工。
     */
    @RequestMapping("admin/findById")
    public ResultVO<Admin> findById(Integer id) {
        return adminService.getUserById(id);
    }
}
